AWS CDKでVPC構成を作成してみた

AWS CDKでVPC構成を作成してみた

Clock Icon2024.09.04

はじめに

かつまたです。リソース作成の検証の一環として、いくつかの方法でVPC、サブネット、IGW、EC2を利用した簡単な構成を作成してみました。このブログではAWS CDKを利用し、pythonコードでリソースを定義し、作成しました。
別の方法でのリソース作成については以下のブログに記載しました。

https://dev.classmethod.jp/articles/cloudformation-vpc-yaml-KS/

https://dev.classmethod.jp/articles/aws-application-composer-yaml/

構成図は以下の通りです。
CFn.drawio.png

前提条件

  • MacOS
  • AWS CLI
  • Node.js 10.8.2
  • Python 3.9.6
  • AWS CDK v2.154.1

セットアップ例↓
AWS CDKの開始方法

https://qiita.com/tsurupoyo/items/f30ac4e8d2047c4edbe4

セットアップとプロジェクト作成

1.AWS CDKを以下コマンドでインストールします。

sudo npm install -g aws-cdk

2.フォルダを作成して移動し、使用言語を指定してプロジェクトを作成します(今回はPython)。

mkdir my_cdk_app
cd my_cdk_app
cdk init app --language python

3.必要なPythonパッケージのインストールを行います。

pip3 install -r requirements.txt

リソース記述

セットアップ完了後、プロジェクトのフォルダ内でリソースを記述します。

my_cdk_app_stack.py

python
from aws_cdk import (
    Stack,
    aws_ec2 as ec2,
)
from constructs import Construct

class MyCdkAppStack(Stack):

    def __init__(self, scope: Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # パラメータの定義
        my_ip = self.node.try_get_context("MyIP") or "自身のIPアドレス"

        # VPCの作成
        vpc = ec2.Vpc(self, "katsumataVPCCFn",
                      cidr="10.0.0.0/16",
                      max_azs=2,
                      subnet_configuration=[
                          {
                              'cidrMask': 24,
                              'name': 'Public',
                              'subnetType': ec2.SubnetType.PUBLIC
                          }
                      ])

        # セキュリティグループの作成
        security_group = ec2.SecurityGroup(self, "katsumataSgCFn",
                                           vpc=vpc,
                                           description="Allow HTTP",
                                           allow_all_outbound=True)
        # セキュリティグループにインバウンドルールを追加
        security_group.add_ingress_rule(ec2.Peer.ipv4(my_ip),
                                        ec2.Port.tcp(80),
                                        "Allow HTTP from MyIP")

        security_group.add_ingress_rule(ec2.Peer.ipv4(my_ip),
                                        ec2.Port.tcp(22),
                                        "Allow SSH from MyIP")

        # EC2インスタンスの作成
        ec2_instance = ec2.Instance(self, "katsumataEC2CFn",
                                    instance_type=ec2.InstanceType("t2.micro"),
                                    machine_image=ec2.MachineImage.generic_linux({
                                        "ap-northeast-1": "ami-00c79d83cf718a893" #自身のリージョンに存在するAMI IDを記入
                                    }),
                                    vpc=vpc,
                                    security_group=security_group,
                                    vpc_subnets={
                                        'subnet_type': ec2.SubnetType.PUBLIC
                                    })

app.py

python
#!/usr/bin/env python3
import aws_cdk as cdk
from my_cdk_app.my_cdk_app_stack import MyCdkAppStack

app = cdk.App()
MyCdkAppStack(app, "MyCdkAppStack")
app.synth()

デプロイ

1.CDKで初めてデプロイする際はbootstrapコマンドを使用します。
CDKのデプロイプロセスで使用されるアーティファクトを保存するためのS3バケットといったCDKアプリケーションをデプロイするために必要なリソースをAWSアカウントとリージョンに作成します。

cdk bootstrap aws://<AWS_ACCOUNT_ID>/<AWS_REGION>

2.CDKをデプロイします。

cdk deploy

出力例
スクリーンショット 2024-08-28 16.21.39 2

コンソール上でリソースを確認することができました。
スクリーンショット 2024-08-28 16.23.56.png

3.必要に応じてスタックを削除します

cdk destroy <スタック名>

出力例
スクリーンショット 2024-08-28 16.29.38.png

おわりに

AWS CDKでPythonを用いてリソースを作成しました。使い慣れた言語を用いて、YAMLテンプレートを記述することなくリソースが作成することができ、今後も積極的に活用していきたいサービスだと感じました。
ご覧いただきありがとうございました。

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.